package com.itfenghuang.day03;

import com.itfenghuang.day01.A02_继承Extends;

public class A03_多态 {
//        成员变量,成员方法,属性,
//            类中的成员:成员变量,成员方法,构造方法,构造代码块,静态代码块




//        1.概述
//                定义:同一个对象在不同的时刻体现出不同的状态
//        2.多态的前提条件
//                1)继承
//                2)方法的重写
//                3)父类引用指向子类对象
//        3.作用
//                提高程序的扩展性
//        4.多态中成员的关系
//                1)成员变量
//                        不具备多态性  编译看左边   运行看左边
//                2)成员方法
//                        编译看左边  运行看右边
//        5.多态的弊端
//                不能使用子类特有的成员
    public static void main(String[] args) {
//        父类引用指向子类对象
//                new Cat();
//            父类引用
//          Animal a=new Cat();
//            a.eat();
//        Cat cat = new Cat();
//        AnimalTool.show(cat);
//        Pig pig = new Pig();
//        AnimalTool.show(pig);

        Animal a = new Cat();
        System.out.println(a.num);
//        System.out.println(a.num1);
//        a.catchMouse()    (不能抓老鼠)
    }
}

class Animal{
    public int num=10;
    public void eat(){
        System.out.println("动物吃东西");
    }
}
class Cat extends Animal{
    public int num1=20;
    @Override
    public void eat() {
        System.out.println("猫吃鱼");    }
        public void catchMouse(){
            System.out.println("抓老鼠");
        }
}
class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃肉");    }
}
class Pig extends Animal{
    @Override
    public void eat(){
        System.out.println("猪持草");
    }
}
//  定义一个动物工具类,在动物工具类里面分别提供一些方法,这些方法是用来调用猫类狗类中的吃的方法
class AnimalTool{
    public static void show(Animal animal) {
//        调动物吃的方法
        animal.eat();
    }

}

